    # -*- coding: utf-8 -*-

 ###############################################
 ##                                             ##
 ##   Basiq Taller                               ##
 ##                                              ##
 ##                                              ##
 ##   from Basiq series                          ##
 ##   by Críptidos Digitales                     ##
 ##   GPL (c)2008                                ##
  ##                                             ##
    ###############################################

"""
    Sistema Basiq Taller
"""


import locale
locale.setlocale(locale.LC_ALL, '')

import sys
from PyQt4 import QtCore, QtGui

import access
import principal
import propio
import utilities

import man
import configuracion

import compras.manejador
import personas.modelo
import productos.manejador
import servicios.manejador



class MyApp(QtGui.QApplication):

    BASICO = 0
    TALLER = 1

    @property
    def config(self):
        """property 'config', read only"""
        return self.__config

    @property
    def forma(self):
        return self.__forma

    def setForma(self, forma):
        self.__forma = forma

    @property
    def distribution(self):
        """property 'distribution', read only"""
        return 1    # Taller

    @property
    def info(self):
        """property 'info', read only, dict"""
        return {'version':u"0.2.10", 'title':u"Basiq Taller", 'author':u"Jorge Hojyo", 'company':u"Críptidos Digitales", 'license':u"GPL (c) 2008", 'alias':u"basiqT"}

    @property
    def screenGeometry(self):
        return self.__screenGeometry

    @property
    def fontZoom(self):
        if self.__screenGeometry.height() == 1024:
            return 1.8
        elif self.__screenGeometry.height() == 800:
            return 1.25
        elif self.__screenGeometry.height() <= 768:
            return 1.20
        else:
            return 1.0

    @property
    def reach(self):
        return self.__reach

    def __init__(self,  *args):
        # print "MyApp.__init()"
        QtGui.QApplication.__init__(self, *args)
        self.__config = configuracion.Parser()
        self.__screenGeometry = QtGui.QDesktopWidget().screenGeometry()
        self.__reach = 128
        self.__forma = None
        self.__controller = {}

        # self.setController('ventas', ventas.Controller(app=self))


    def initDB(self):
        self.__status = man.inicializa()
        personas.modelo.inicializa()
        productos.manejador.inicializa()


    def controller(self, type):
        m = "MyApp.controller()"
        return self.__controller[type]


    def setController(self, name, controller):
        self.__controller[name] = controller


    def setReach(self, valor):
        self.__reach = valor


if __name__ == "__main__":
    app = MyApp(sys.argv)
    app.setQuitOnLastWindowClosed(True)

    formaAcceso = access.Form(app=app)
    result = formaAcceso.exec_()

    if result == QtGui.QDialog.Accepted:
        formaAcceso.destroy()

        app.initDB()

        if not man.runCount():
            formaDatos = propio.Forma(app=app)
            formaDatos.agrega()
            result = formaDatos.exec_()

        if result == QtGui.QDialog.Accepted:

            man.incrementRunCount()

            app.holder = man.rolI(tipo=u'propio')

            app.splash = QtGui.QSplashScreen(QtGui.QPixmap("./imagenes/logo.png"), QtCore.Qt.WindowStaysOnTopHint)
            app.splash.showMessage(u"Cargando %s %s ..." % (app.info['title'], app.info['version']), QtCore.Qt.AlignBottom, QtGui.QColor("#4040FF"))
            app.splash.show()
            app.processEvents()

            # if status == QtGui.QDialog.Accepted:
            if True:
                app.setReach(result)

                app.setForma(principal.Form(app=app))

                app.splash.finish(None)

                app.forma.show()


                if man.atributoI(grupo=u'sistema', nombre=u'mostrarTips').valor == u"1":
                    app.forma.ui.tips.raise_()

                sys.exit(app.exec_())
            else:
                app.splash.finish(None)

    else:
        formaAcceso.destroy()



"""

toDo


Actualizar Consulta de pedidos cuando se captura una compra a partir de un pedido


Checar actualización de precios en compras

Implementar código local secundario

Checar importación de clientes

Ventas a crédito

Pagos con Cheque

Conexión en red

Inventario de herramienta

Importación de precios

Manejo de productos temporales

Para aislar el manejo de eventos (evitar referencias externas)
    Mover la definicion de los connects en principal al modulo que genera
    el evento, aprovechar la referencia eventRouter.


"""

